/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package managedBeans;

import controladores.GestionClienteCont;
import controladores.GestionEmpleadoCont;
import controladores.InicioSesionCont;
import java.io.IOException;
import modelos.pojos.Cliente;
import modelos.pojos.Empleado;
import modelos.pojos.Usuario;
import java.io.Serializable;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.apache.log4j.Logger;

/**
 *
 * @author ricardo
 */
@ManagedBean
@SessionScoped
public class UserSession implements Serializable {

    private Usuario usuarioSesion;
    private Cliente clienteSolicitante;
    public static String tipoUsuario;
    public static String cedulaRegistrante;
    protected Logger log = Logger.getLogger(UserSession.class);

    /** Creates a new instance of UserSession */
    public UserSession() {
        usuarioSesion = new Usuario();
        clienteSolicitante = new Cliente();
    }

    public Usuario getUsuarioSesion() {
        return usuarioSesion;
    }

    public void setUsuarioSesion(Usuario usuarioSesion) {
        this.usuarioSesion = usuarioSesion;
    }

    public Cliente getClienteSolicitante() {
        return clienteSolicitante;
    }

    public void setClienteSolicitante(Cliente clienteSolicitante) {
        this.clienteSolicitante = clienteSolicitante;
    }

    public void login() throws IOException {
        Usuario iniciarSesion = InicioSesionCont.iniciarSesion(usuarioSesion.getUser(), usuarioSesion.getCedula(), null);
        if (iniciarSesion != null) {
            usuarioSesion = iniciarSesion;
            buscarSolicitante();
            FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("isSesionAlive", true);
            FacesContext contex = FacesContext.getCurrentInstance();
            contex.getExternalContext().redirect("faces/page/menuPrincipal.xhtml");
        } else {
            FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Error: Credenciales Invalidas", null);
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void actualizarUsuarioSesion() {
        if (tipoUsuario.equals("Cliente")) {
            GestionClienteCont.actualizarInformacion((Cliente) usuarioSesion);
        } else {
            GestionEmpleadoCont.actualizarInformacion((Empleado) usuarioSesion);
        }
    }

    public void cerrarSesion() {
        FacesContext context = FacesContext.getCurrentInstance();
        context.getExternalContext().getSessionMap().clear();
        FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("isSesionAlive", false);
        try {
            context.getExternalContext().redirect("/MBL");
        } catch (IOException ex) {
        }

    }

    public void validarSesion() throws IOException {
        try {
            if (FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("isSesionAlive") == null | FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("isSesionAlive").toString().trim().equals("false")) {
                FacesContext contex = FacesContext.getCurrentInstance();
                contex.getExternalContext().redirect("index.xhtml");
            }
        } catch (Exception e) {
            FacesContext contex = FacesContext.getCurrentInstance();
            contex.getExternalContext().redirect("index.xhtml");

        }
    }

    public void buscarSolicitante() {
        if (tipoUsuario.equals("Cliente")) {
            clienteSolicitante = (Cliente) usuarioSesion;
        } else {
            modelos.pojos.Cliente solicitante = GestionClienteCont.buscarCliente(clienteSolicitante.getCedula());
            if (solicitante != null) {
                clienteSolicitante = solicitante;
            } else {
                clienteSolicitante.setNombre("No existe Cliente");
                clienteSolicitante.setTelefono("");
            }
        }
    }
    
}
